Skip to content

docs(pm-dispatch,os-dev): 决策分析轴由两条扩为三条 —— 补「实际业务需求」轴与创业聚焦原则 (#5130) - #5453

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-5130-three-axes
Aug 5, 2026
Merged

docs(pm-dispatch,os-dev): 决策分析轴由两条扩为三条 —— 补「实际业务需求」轴与创业聚焦原则 (#5130)#5453
os-zhuang merged 1 commit into
mainfrom
claude/issue-5130-three-axes

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Fixes #5130

维护者 2026-08-04 在 #5021 裁决现场的指示(「我们是一个创业项目,应该先专注于核心能力,这个也应该写入项目经理 skills」)落到 agent 协议文本。当天起的实操已按三轴呈报,skill 文本落后于实践 —— 本 PR 把文本追上实践。

前提核对(先做的事)

issue 引用的行号可能已过期,所以先在 origin/main @ 01c0bae 实测。前提成立,并且引用面比 issue 正文写的多一处:全仓 grep(中英两种写法)命中 5 处,全部落在 .claude/:

文件:行 原文
.claude/skills/pm-dispatch/SKILL.md:1003 每个方案必须沿两条固定评估轴
.claude/skills/pm-dispatch/SKILL.md:1013 这两条轴 / 两轴冲突时
.claude/skills/pm-dispatch/SKILL.md:481 the deep two-axis analysis(分诊一节,issue 正文未列)
.claude/agents/os-dev.md:182 Analyze every option on two fixed axes
.claude/agents/os-dev.md:196 justified on both axes

5 处全改,改完复查残留为 0。

改了什么

.claude/skills/pm-dispatch/SKILL.md 第 8 步(Escalate):「两条固定评估轴」→ 三条,新轴 「实际业务需求」列第一位:

原两轴(项目长远合理性、防 AI 写代码与写元数据 app 犯错)原文一字未改,仅顺序后移;收尾句改为三条 / 三轴;分诊一节的 deep two-axisthree-axis

.claude/agents/os-dev.mdneeds_decision 升级段同步(two fixed axesthree fixed axes,both axesall three axes,新增对应的英文 Real business need 轴)。这一处是按派单补充说明「若 .claude/agents/os-dev.md 也引用两轴,按验收第一条同步;引用处以 grep 实测为准」做的,理由:两处本就是同一套框架的两半,不同步的话开发 agent 按两轴上报、PM 按三轴呈报,业务轴每次都要 PM 事后补。先例上两文件也是一起改的(.changeset/pm-dev-discipline-2026-08-04.md,docs(pm-dispatch,os-dev))。若维护者认为发布/内部之外还要区分 PM 与 dev 两种 agent,这一段是独立 hunk,可单独回退。

刻意没改的两处(都不是漏)

  1. skills/objectstack-pm-dispatch/SKILL.md(已发布 skill)仍是两轴,7 处。 那是 catalog 发布内容,属用户可见变更(要 changeset),而且第三条轴的措辞绑的是我们自己的处境(「我们是一个创业项目」),是否该泛化给装这份 skill 的第三方项目是个新问题 —— pm-dispatch SKILL:决策分析轴由两条扩为三条 —— 补「实际业务需求」轴与创业聚焦原则(维护者 2026-08-04 指示) #5130 验收第三条明确把范围钉在 .claude/。按 Prime Directive chore: version packages #10 另立 已发布 skill objectstack-pm-dispatch 仍是两轴决策框架 —— 与 .claude/ 内部三轴(#5130)分叉,且「创业聚焦」轴是否该泛化给第三方项目未定 #5451(含 A/B/C 三方案与倾向 B 的理由),Blocked-by: #5130
  2. docs/adr/0121-*.md 的「两条评估轴」 —— 那是记述当时按两轴做出的裁决,属历史记录,改了就是篡改。ADR 要改需另立 ADR(PD#13)。

同文件的排队单 #5095(域分类表补包)按派单要求本轮完全未碰。

验证

.claude/ 下的 agent 协议文本没有可执行面,仓里也没有任何 test 钉过这段措辞(全仓 grep two fixed axes / both axes / 两条固定评估轴*.ts,*.mts,*.mjs 无相关命中),所以这次没有可写的新单测 —— 与其编一条 grep 断言充数,不如说明真实覆盖来自读这些文件的仓内门禁,四条全绿:

✓ check-nul-bytes --self-test: 16 assertions over a temp git repo (real scan() path)
check-nul-bytes: OK (scanned 5442 tracked text file(s); ... no raw NUL bytes).

✓ check-doc-authoring self-test: scope wiring (.claude and the live docs/ corpus in ...) hold.
✓ doc authoring guard: 362 files clean — no bare metadata literals.

check-role-word: OK (43 baselined file(s), no new occurrences).
check-org-identifier: OK (1633 author-facing source file(s), no removed session.tenantId alias).

changeset 门禁两条也跑了:check-changeset-no-major / check-changeset-fixed 均 exit 0。

字节纪律另做了一次超出门禁盲区的自扫:grep -naP '[\x00-\x08\x0b\x0c\x0e-\x1f]' 对两个文件均无命中,fileUnicode text, UTF-8 text

changeset

按仓惯例给了空 frontmatter changeset(.changeset/pm-dispatch-three-axis-decision-frame.md)。issue 说「无 changeset 需求」,实测仓惯例是:pr-automation.ymlchangeset-check 对每个 PR 强制要求本 PR 新增至少一个 changeset,而空 frontmatter 是它认可的「本 PR 不发布任何东西」声明,与 skip-changeset 标签等价。同类先例:.changeset/pm-dispatch-domain-lanes.md.changeset/pm-dispatch-escalation-bar.md.changeset/pm-dev-discipline-2026-08-04.md —— 都是 .claude/ 改动 + 空 frontmatter + 「不发布任何包」。

🤖 Generated with Claude Code

https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE


Generated by Claude Code

维护者 2026-08-04 在 #5021 裁决现场的指示(「我们是一个创业项目,应该先专注于
核心能力,这个也应该写入项目经理 skills」)落到 agent 协议文本。当天起的实操
已按三轴呈报,skill 文本落后于实践。

- SKILL.md 第 8 步(Escalate):「两条固定评估轴」→ 三条,新轴「实际业务需求」
  列第一位 —— 判据要求实测(谁在写这个键 / 谁在读这个能力 / showcase 与真实
  部署里的用法),不接受「读起来像有用」;创业阶段聚焦原则:能力扩张默认从紧,
  无业务拉动的声明面按 implementation-first 处置,已发布但零消费的能力不因
  沉没成本获得豁免(先例 #5021 / #4988 / #4834)。
- 原两轴(项目长远合理性、防 AI 写代码与写元数据 app 犯错)原文保留,仅顺序
  后移;收尾句「这两条轴 / 两轴冲突」→ 三条 / 三轴;分诊一节 line 481 的
  `the deep two-axis analysis` → `three-axis`。
- .claude/agents/os-dev.md 的 needs_decision 升级段同步(two fixed axes →
  three fixed axes、both axes → all three axes)。两处是同一套框架的两半:
  不同步则开发 agent 按两轴上报、PM 按三轴呈报,业务轴每次要 PM 事后补。

为什么值一条独立的轴:#4936#5021 是业务轴改变结论的正反两例 —— 前者因
showcase 自证业务方向而裁「响亮拒绝而非退役」,后者因无拉动裁退役;只看原来的
两条轴,这两单会得出同一个答案。

刻意未动:已发布目录 skills/objectstack-pm-dispatch/SKILL.md 的两轴镜像(发布
内容,另立 #5451),docs/adr/0121 记述的是当时按两轴做出的裁决(历史记录)。

Fixes #5130

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE
@vercel

vercel Bot commented Aug 5, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Aug 5, 2026 12:30pm

Request Review

@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

⛔ merge queue 构建失败 — 先分诊,再决定要不要重排

队列构建 31006214413 红了。队列跑的是全量套件(PR 侧 CI 只跑 affected 子集),
所以失败的测试可能在本 PR 没碰过的包里 —— 那不是重排能修的。每次盲目重排都会让排在后面的所有 PR 重建一轮。

失败的 job(日志抽取,best effort):

  • Temporal Conformance (live PG + MySQL) — 失败步骤: Run the non-SQL temporal backends under the skewed process zone

    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mretires a legacy global unique index and replaces it with the composite
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mretires the legacy `uniq_<table>_<col>` index left by the drift rebuild path
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mbare-composite tightening + duplicate pre-flight (ADR-0120 D4)�[2m > �[22m�[2ma
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mbare-composite tightening + duplicate pre-flight (ADR-0120 D4)�[2m > �[22m�[2mB
    �[22m�[39m[schema-drift] product: cannot tighten 'uniq_product_organization_id_code' as UNIQUE (COALESCE(organization_id, '__global__'), code) — existing rows already violate the NULL-safe unique cons
    �[90mstderr�[2m | src/sql-driver-unique-tenancy.test.ts�[2m > �[22m�[2mSqlDriver unique × tenancy (#3696)�[2m > �[22m�[2mbare-composite tightening + duplicate pre-flight (ADR-0120 D4)�[2m > �[22m�[2mB
    �[22m�[39m[schema-drift] REFUSING to rebuild 'uniq_product_organization_id_code' on 'product' as a NULL-safe unique — 1 duplicate group(s) violate it (e.g. organization_id="__global__", code="DUP" × 2
    

历史信号:

  • 本 PR 过去 24h 无队列失败记录(首次)。
  • 过去 24h 队列共有 3 个失败构建(不含本次)。

分诊清单:

  1. 失败测试在本 PR 改动的包里 → 真回归,修 PR。
  2. 失败测试与本 PR 无关 → 在其他 PR 的同类评论里搜同名测试;出现过 ⇒ flaky 实锤,开 issue 修/隔离那条测试。修好前重排只会再烧一轮全队列。
  3. 两者都不是 → 可能与同组 PR 语义冲突;等前面的 PR 落地或失败出队后再重排一次即可,不要连续重排。

Generated by Claude Code · merge-queue-triage workflow (#4859)

Merged via the queue into main with commit 3681d2a Aug 5, 2026
19 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-5130-three-axes branch August 5, 2026 12:40
akarma-synetal pushed a commit to akarma-synetal/framework that referenced this pull request Aug 6, 2026
…talled the release (objectstack-ai#5292) (objectstack-ai#5467)

The gate's failure message offered "an empty changeset" and the
`skip-changeset` label as two equal ways out, and the comment above the
counter called them "on par". They are equal to THIS gate's counting, but
not downstream: the label is a gate-level exemption that produces no input
for changesets/action, while an empty-frontmatter changeset is a real input
to it. When every pending changeset is empty the action takes its
`hasChangesets && !hasNonEmptyChangesets` branch, prints "All changesets
are empty; not creating PR" and returns in 0 seconds -- no version PR, no
publish, Release run green. That is objectstack-ai#4898, which stalled 17.0.0-rc.2.

The message was therefore an active mis-prescription: it handed a known
release-stalling input to whoever had just hit the wall.

Rewritten to three ranked routes, with the label preferred and the empty
changeset demoted to a warned last resort that names objectstack-ai#4898. The counting
logic is untouched: an empty changeset still counts, so today's precedent
(objectstack-ai#5453 / objectstack-ai#5454, both merged behind empty changesets) stays valid.


Claude-Session: https://claude.ai/code/session_01GX3sL71LFq8m2usg6VqTSE

Co-authored-by: Claude <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation size/s tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pm-dispatch SKILL:决策分析轴由两条扩为三条 —— 补「实际业务需求」轴与创业聚焦原则(维护者 2026-08-04 指示)

2 participants